package cn.tedu.service;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Service;

/**
 * @author zhuzhuking
 */
@Service
/**IOC*/
@Aspect
/**标记这是一个aop切面类*/
public class AspectTest {
    /**切面由切点(指点具体要通知的类或者方法)*/
    /**切点表达式: *是通配符 ..表示0~n个 */
                        /**方法返回值/包路径/类名/方法名/参数列表*/
    @Pointcut("execution( * cn.tedu.service..*.*(..))")
    public void point(){
        /**通知(是一个方法的自定义功能)组成*/
    }
    @Around("cn.tedu.service.AspectTest.point()")
    public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable{
        /**joinPoint是连接点*/
        long time = System.currentTimeMillis();
        Object o = joinPoint.proceed();
        String name = joinPoint.getTarget().getClass().getName();
        /**用于观察执行方法的名字*/
        time = System.currentTimeMillis()-time;
        System.out.println(name+"方法的执行时间是"+time);
        return o;
    }
}
